package com.poly.common.core.utils.listener;

import cn.hutool.core.util.ReflectUtil;
import com.poly.common.core.tools.utils.Func;
import com.poly.common.core.tools.utils.StringPool;
import com.poly.common.core.utils.SpringUtils;

import java.util.Optional;

/**
 * <p>cms监听帮助</p>
 *
 * @author QingYu Chen
 */
public class ListenerUtils {

    /**
     * 调用cms配置的监听函数
     *
     * @param listener  监听字符串 {com.*.*.class#method}
     * @param parameter 对应的参数
     * @return 结果
     */
    public static Optional<Object> invoke(String listener, Object... parameter) {
        try {
            if (Func.hasEmpty(listener, parameter)) {
                return Optional.empty();
            }
            if (!listener.contains(StringPool.HASH)) {
                return Optional.empty();
            }
            String[] split = listener.split(StringPool.HASH);
            return Optional.ofNullable(ReflectUtil.invoke(SpringUtils.getBean(Class.forName(split[0])), split[1], parameter));
        } catch (Exception e) {
            e.printStackTrace();
            return Optional.empty();
        }
    }

}
